this can use LL1 parser code and possible tools are gnu bnf and llnextgen or packcc
